Objectives:

My goal is to learn how to conduct a quantitative synthesis to better understand the current literature on the rupture of an intracranial aneurysm with conservative management.

After performing my systematic review, I have three aims:

  1. To quantitatively synthesise the data in order to calculate a summary pooled proportion.
  2. To calculate heterogeniety across the studies to help consider whether pooling is appropriate.
  3. If pooling is appropriate, then to explore the heterogeneity by considering pre-specified and post hoc sub-group analysis and meteregression.

The statistical approaches will be tailored to the source dataset and structure of the data which is characterised by the following:

  1. Rupture of an intracranial aneurysm in a single patient is a rare event.
  2. Small number of rupture outcome events in the sample populations, with the proportion very close to zero.
  3. While the outcome of rupture is binomial, in a sample population, the distribution of rupture outcomes over time is is better described by the non-central hypergeometric distribution, since some aneurysms are considered at higher risk of rupture.
  4. There are a wide range of size in sample populations identified by the systematic review, with both very small studies and very large studies included.
  5. The rate of rupture over time does not appear to be constant when biological factors and current published data are considered, thus the risk of rupture will be considered.

To achieve these aims, the various packages and source dataset in R are loaded, and each part carried out with an explanation of the rationale for the data analysis. Version control is carred out with GitHub.

Load required packages

The following R packages were loaded: tidyverse, meta, metafor and BiasedUrn.

Load required data

A single excel data file is loaded to carry out all data analysis, with all steps documented below to ensure reproducibility of research.

Correct vector types

Vector types are corrected to integers, factors, doubles as appropriate for analysis in R, and stored as a new tibble.

Calculate individual study proportions and use meta-analytical methods to create a pooled summary proportion

Individual rupture risk at study entry can be calculated by calculating the proportion of patients who ruptured ie pi = xi / ni.

xi = cases ie number of aneurysm ruptures during follow up ni = total ie number of aneurysms at study entry pi = raw proportions ie xi / ni

These can then be combined across studies to consider a meta-analyis of proportions. When considering any meta-analsis, the basic steps are

For every dataset, a suitable effect measure must be chosen, and a choice should be made regarding the meta-analytical methods. Most meta-analytical methods weight the individual effect sizes from each study to create a pooled effect size. In this study, we will consider individual study proportions, and create a pooled summary proportion for rupture risk.

Given unique characteristics of the data that we are synthesising listed above, means that appropriate statistical methods for meta-analysis and calculation of the confidence intervals must be considered.

Choice of meta-analytical method

Classical meta-analytical methods have the potential to contribute to additional sparse data bias and give misleading results for rare events. Bradburn 2007 from Cochrane

The first step is to improve the statistical properties of a skewed dataset in terms of the data distribution and variance prior to synthesis. Variance is the squared difference from the mean. To achieve this, the data is transformed in order to approximate a normal distribution to enhance the validity of the statistical procedures. The most common transformation methods are the logit and the double arcine transformation.

In the logit transformation, proportions are converted to the natural logarithm of the proportions (i.e., the logit), and assumed to follow the normal distribution. All analyses are performed on the logit proportion, and then the logits converted back to raw proportions for reporting. However, if there are no ruptures and pi = 0, then the logit and variance become undefined. Furthermore, if there is high between-study variablity or small study sample sizes, the logit transformed proportion is underestimated. Hamza 2008 To overcome this statistical limitation, typically a continuity correction of 0.5 is applied. In our analysis, this creates risk of introducing additional sparse data bias and reducing the validity of the result, especially given that pi is close to 0.

The alternate method of transformation to consider which can better normalises the distribution and variance especially for small sample sizes or rare event rates, is the double arcine transformation of Freeman-Tukey Freeman and Tukey 1950. After statistical procedures, the result can be later be backtransformed using the equation derived by Miller Miller 1978. However, the Miller back transformation utilises the harmonic mean of the sample sizes. This affects the backtransformed proportion as described by Schwarzer 2019, and leads to misleading results. This issue is particularly evident when there is a large range of sample sizes. This issue does affect our specific dataset since n in the studies varies from 22 to over 3323.

In the classical meta-analytical methods, after transformation and statistical procedures, the results are backtransformed to study level results, and synthesised. Data synthesis can be carried out using the generic inverse variance method, which calculates the individual study effect size, and creates a pooled estimate after weighing each study by the inverse of the variance of the effect size estimate. This means that larger studies with smaller standard errors are given more weight than smaller studies with larger standard errors. This minimises the imprecision of the pooled effect size resut. A variation on the generic inverse variance method incorporates an assumption that there is some variation between studies, ie heterogeneity, while measuring the same effect. This produces a random effects meta-analysis, the most common of which is the the DerSimonian and Laird method DerSimonian 1986. This is the most commonly utilised method in medical meta-analysis.

Above, we have highlighted significant statistical limitations of the classical meta-analytical methods with our specific dataset and research question. To overcome these statistical limitations, we can instead utilise the random intercept logistic regression model for statistical procedures and data synthesis, a type of generalised linear mixed model, as recommended by Stinjen 2010 and Schwarzer 2019.

Our rationale for choice of a GLMM for statistical procedures and data synthesis is based on the following:

  • The GLMM is an exact likelihood model based on the the binomial distribution, and thus accounts for the binomial outcome of aneurysm rupture.Hamza 2008
  • GLMMs can be fitted using the logit transformation, and results backtransformed to the original scale, in our case a proportion.
  • Standard normal approximation logit transformed proportions are underestimated and biased downwards with smaller sample sizes and greater the between-study variation, which is a characteristic of our dataset. The GLMM is not affected by this issue. Hamza 2008
  • The GLMM has greater accuracy of the logit proportion and coverage percentages of the corresponding confidence intervals compared to standard normal approximation logit transformation. Hamza 2008
  • The sample populations range from 22 to 3323, which creates misleading results when utilising the Freeman-Tukey methods of transformation and backtransformation of Miller. Schwarzer 2019
  • The outcome is very rare, with proportions less than 0.05 is almost all studies, and thus generic inverse variance and DL methods for data synthesis can lead to misleadong results Stinjen 2010
  • The GLMM does not require a continuity correction even if pi = 0. Hamza 2008
  • Additional calculations to consider covariates can be performed using noncentral hypergeometric models.

The limitation of this statistical approach is that individual study weights utilised to pool the individual studies to create the pooled proportion will not be available. In the past, utilisation of a GLMM for meta-analysis was not practical due to its computationally intensive nature, and lack of availabilty in standard statistical software packages. However these limitations are now overcome, with statistical modules for GLMMs now available in both SAS and R stastical packages.

Choice of confidence interval

Use of the CI is important, since CIs convey information about magnitude and precision of individual study effect size and the pooled meta-analytical effect size. The choice of the CI should be tailed to the dataset that is present. Options include:

  • Wald method or Normal Approximation
    • this produces CIs that are often centred on the point estimate
    • thus they are not often suitable with proportions close to the boundaries of 0 and 1, since this method can create CIs that are below 0 and above 1.
    • for proportions that are often 0 or close to zero, a continuity correction may be applied, but this can lead to additional overshoot
  • Clopper-Pearson or Exact method
    • Most commonly used, and recommended to avoid approximation by most statistical textbooks.
    • Called exact because it is based directly on the binomial distribution and not an approximation.
    • Output is usually conservative, and the true coverage is almost always larger than the derived coverage ie closer to a 99% CI than a 95% CI.
    • The derived 95% CI does not accurately reflect the true 95% CI unless n is quite large Agresti 2008.
    • When n is small eg 10, there is severe overcoverage (closer to 99% coverage) with the true CI much larger than the derived 95% CI.
    • Even when n is large, the derived 95% CI does not accurately reflect the true 95% CI when p is near 0 because the binomial distribution is highly skewed. Agresti 1998
    • Needs a very large number of n to be accurate Brown 2001
  • Wilson method
    • Is suggested for small n ie 40 or less and/or extreme probabilities Brown 2001
    • The derived CI more accurately reflects the true CI with less variability compared to CP method Agresti 1998
    • For small n, the Wilson CI’s are shorter and a more accurate derivation than the CP CI’s Vollset 1993
    • Can be used and is recommended for all sample sizes Newcombe 1998

We will choose the Wilson method for CI for the following reasons:

  • Rupture of an aneurysm is a rare event with the proportion p very close to zero
  • The distribution of the outcomes is highly skewed towards zero, and thus Wald confidence intervals cross zero.
  • There is a wide range of sample sizes, with very small studies and very large studies included
  • More accurate CIs are likely to be generated using the Wilson method given the highly skewed and sparse dataset.

This is aligned with the recommendations of Vollset 1993, Agresti 1998, Newcombe 1998 and Brown 2001.

Analyse total cohort of all aneurysms 10 mm and less

sizedata <- filter(maindata, size == 10)

Assumptions:

If the number of aneurysms for a particular size criteria in the study has been reported, this has been extracted and utilised for analysis.

If the number of number of aneuryms is not known for the specific size criteria, and we do know the proportion of patients with multiple aneuryms in the total observation cohort:

  1. The assumption is that a patient with multiple aneurysms has 2 aneurysms, and we can calculate the total number of aneurysms for that size criteria.
  2. This can be caculated using the proportion of patients with multiple aneuryms variable multi_tot in the total observation cohort variable num_tot.
  3. This proportion prop_multi can be multiplied by the number of patients in that specific size criteria. This is the number of patients that we can assume has 2 aneurysms.
  4. The total number of aneurysms for that size variable total_size is then calculated by adding variable num.
  5. We have now calculated the total number of aneurysms in that size category, taking into account aneurysm multiplicity.

If the number of number of aneuryms is not known for the specific size criteria, and we do NOT know the proportion of patients with multiple aneuryms in the total observation cohort, then 1 patient is assumed to have 1 aneurysm.

dat <- sizedata %>%
  mutate(prop_multi = multi_tot / num_tot) %>%
  mutate(num_multi = prop_multi * num + num) %>%
  mutate(num_multi_temp = coalesce(num_anr, num_multi)) %>%
  mutate(total_size_temp = coalesce(num_anr, num)) %>%
  mutate(total_size_temp_2 = coalesce(num_multi_temp, total_size_temp)) %>%
  mutate(total_size = round(total_size_temp_2, 0)) %>%
  drop_na(total_size) %>% 
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  select(auth_year, rupt, total_size, type)

Meta-analysis of proportions using GLMM and Wilson CIs

pes.summary.glmm = metaprop(rupt, total_size,
                            data=dat,
                            studlab=paste(auth_year),
                            method="GLMM",
                            sm="PLOGIT",
                            method.tau = "ML", 
                            method.ci = "WS",
                            pscale = 100
                            ) 
pes.summary.glmm
##                   events             95%-CI
## Bor 2015          0.7444 [ 0.2535;  2.1655]
## Broderick 2009    1.8519 [ 0.5093;  6.5019]
## Burns 2009        0.5780 [ 0.1021;  3.2011]
## Byoun 2016        1.7628 [ 0.9871;  3.1288]
## Choi 2018         0.5780 [ 0.1021;  3.2011]
## Gibbs 2004        0.0000 [ 0.0000; 14.8655]
## Gondar 2016       0.8152 [ 0.2776;  2.3691]
## Guresir 2013      0.7812 [ 0.2660;  2.2715]
## Irazabal 2011     0.0000 [ 0.0000;  7.8652]
## Jeon 2014         0.3521 [ 0.0966;  1.2746]
## Jiang 2013        0.0000 [ 0.0000;  7.1348]
## Juvela 2013      18.6747 [13.4796; 25.2868]
## Loumiotis 2011    0.0000 [ 0.0000;  2.3446]
## Matsubara 2004    0.0000 [ 0.0000;  2.3736]
## Matsumoto 2013    2.6549 [ 0.9069;  7.5160]
## Mizoi 1995        0.0000 [ 0.0000; 15.4639]
## Morita 2012       1.8658 [ 1.4582;  2.3845]
## Murayama 2016     2.2384 [ 1.6660;  3.0014]
## Oh 2013           0.0000 [ 0.0000; 16.8179]
## Serrone 2016      0.5155 [ 0.0911;  2.8615]
## So 2010           1.1450 [ 0.3902;  3.3118]
## Sonobe 2010       1.5625 [ 0.7589;  3.1897]
## Teo 2016          2.3810 [ 0.8130;  6.7666]
## Thien 2017        0.6173 [ 0.1090;  3.4133]
## Tsukahara 2005    3.4722 [ 1.4921;  7.8703]
## Tsutsumi 2000     4.3478 [ 1.4896; 12.0212]
## Villablanca 2013  1.5544 [ 0.5300;  4.4697]
## Wiebers-R 1998    1.3503 [ 0.8558;  2.1244]
## Wilkinson 2018    0.0000 [ 0.0000; 14.8655]
## Zylkowski 2015    2.7273 [ 0.9318;  7.7131]
## 
## Number of studies combined: k = 30
## 
##                      events           95%-CI
## Fixed effect model   1.7872 [1.5638; 2.0419]
## Random effects model 1.2112 [0.7844; 1.8659]
## 
## Quantifying heterogeneity:
##  tau^2 = 0.7974; tau = 0.8930; I^2 = 82.7%; H = 2.41
## 
## Test of heterogeneity:
##       Q d.f.  p-value             Test
##  170.38   29 < 0.0001        Wald-type
##  148.41   29 < 0.0001 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

The output from the random effects meta-analysis using the GLMM:

Summary estimate is 1.2112 [0.7844; 1.8659]

Note that for GLMMs no continuity correction is used. Meta documentation Given our rationale for choosing the GLMM, this should produce the least biased result and reasonable coverage probabilities for the 95% CI, as suggested by Stinjen 2010. Note CIs are using Wilson score method.

Remember that the confidence interval from this random-effects meta-analysis describes uncertainty in the location of average proportion across the individual studies. Thus there is likely to be an even higher degree of uncertainty in the true population rupture risk. Cochrane handbook 10.10.4.2

Display meta-analysis result using a publication quality forest plot

forest(pes.summary.glmm,
       layout = "meta",
       comb.fixed = FALSE,
       comb.random = TRUE,
       leftlabs = c("Study", "Ruptures", "Total"),
       rightcols = c("effect", "ci"),
       rightlabs = c("Ruptures per 100", "95% CI"),
       smlab = " ",
       xlim=c(0,10),
       xlab = "Rupture Proportion per 100",
       pooled.events = TRUE,
       ) 

Calculate heterogeniety across the studies

Heterogeniety refers to all types of variation across studies. Heterogeniety can be considered in terms of

  1. Clinical heterogeneity, which refers to variablity in characteristics of patients, exposures, interventions and outcomes.
  2. Methodological heterogeneity, which refers to variablity in study designs eg randomization, blinding etc.
  3. Statistical heterogeneity, which refers to the situation when variation across studies is greater than variation or random error within a study.

Clinical and methodolocal heterogeniety cannot be calculated. These are both subjectively evaluated by the meta-analyst. If there is substantial clinical and/or methdological heterogeneity, a quantitative synthesis should not be performed to create a pooled effect measure, and instead a qualitative systematic review performed.

If clinical and methodological differences are not significant, then quantative synthesis is considered appropriate.

Overall, identification of heterogeniety is critical to assist in interpreting the results of the meta-analyis. This gives the reader confidence that the effect demonstrated is generalisable. It is impossible to completely avoid heterogeneity, however clinical and methodological heterogeneity can be minimised by using strict inclusion criteria during systematic review.

Statitical heterogeneity is most commonly calculated using Cochrane’s Q statistic, tau-squared statistic or the Inconsistency measure I^2 statistic.

  1. Cochrane’s Q. This test performs poorly for small numbers of studies. If the p value for the Q statistic is below 0.05, then this suggests that there is significant between-study heterogeneity.
  2. tau-squared statistic. Uncommonly reported. An estimate of the between-study variance. When tau-squared is zero this is indicative of no heterogeneity.
  3. I^2 statistic. I^2 represents the proportion of total heterogeniety that can be attributed to the actual between-study heterogeniety. I^2 thresholds within 25, 50, and 75% represent low, moderate, and high variance, respectively. 95% CIs can also be calculated for the I^2 statistic to demonstrate the uncertainty of the result.

We will choose the I^2 statistic for the following reasons:

  1. This measure is not affected by the number of studies included.
  2. The output offers a percentage that is easily interpreted
  3. This is the standard method of reporting for Cochrane reviews.
pes.summary.glmm
##                   events             95%-CI
## Bor 2015          0.7444 [ 0.2535;  2.1655]
## Broderick 2009    1.8519 [ 0.5093;  6.5019]
## Burns 2009        0.5780 [ 0.1021;  3.2011]
## Byoun 2016        1.7628 [ 0.9871;  3.1288]
## Choi 2018         0.5780 [ 0.1021;  3.2011]
## Gibbs 2004        0.0000 [ 0.0000; 14.8655]
## Gondar 2016       0.8152 [ 0.2776;  2.3691]
## Guresir 2013      0.7812 [ 0.2660;  2.2715]
## Irazabal 2011     0.0000 [ 0.0000;  7.8652]
## Jeon 2014         0.3521 [ 0.0966;  1.2746]
## Jiang 2013        0.0000 [ 0.0000;  7.1348]
## Juvela 2013      18.6747 [13.4796; 25.2868]
## Loumiotis 2011    0.0000 [ 0.0000;  2.3446]
## Matsubara 2004    0.0000 [ 0.0000;  2.3736]
## Matsumoto 2013    2.6549 [ 0.9069;  7.5160]
## Mizoi 1995        0.0000 [ 0.0000; 15.4639]
## Morita 2012       1.8658 [ 1.4582;  2.3845]
## Murayama 2016     2.2384 [ 1.6660;  3.0014]
## Oh 2013           0.0000 [ 0.0000; 16.8179]
## Serrone 2016      0.5155 [ 0.0911;  2.8615]
## So 2010           1.1450 [ 0.3902;  3.3118]
## Sonobe 2010       1.5625 [ 0.7589;  3.1897]
## Teo 2016          2.3810 [ 0.8130;  6.7666]
## Thien 2017        0.6173 [ 0.1090;  3.4133]
## Tsukahara 2005    3.4722 [ 1.4921;  7.8703]
## Tsutsumi 2000     4.3478 [ 1.4896; 12.0212]
## Villablanca 2013  1.5544 [ 0.5300;  4.4697]
## Wiebers-R 1998    1.3503 [ 0.8558;  2.1244]
## Wilkinson 2018    0.0000 [ 0.0000; 14.8655]
## Zylkowski 2015    2.7273 [ 0.9318;  7.7131]
## 
## Number of studies combined: k = 30
## 
##                      events           95%-CI
## Fixed effect model   1.7872 [1.5638; 2.0419]
## Random effects model 1.2112 [0.7844; 1.8659]
## 
## Quantifying heterogeneity:
##  tau^2 = 0.7974; tau = 0.8930; I^2 = 82.7%; H = 2.41
## 
## Test of heterogeneity:
##       Q d.f.  p-value             Test
##  170.38   29 < 0.0001        Wald-type
##  148.41   29 < 0.0001 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

I^2 = 84.4%, which is high, which means that the between study variation due to clinical and methodological variation between studies is high, and greater than that expected by random chance variation within studies. This may be explained by co-variates and thus consideration should be made to avoid data-sythesis or expore reasons for heterogeneity.

For interest, the tau-squared = 0.9098 and the Q-statistic is < 0.0001 which also confirms high between-study heterogeniety.

How to explore and address heterogeneity

There are various strategies to explore and adddress heterogeneity. If there is considerable heterogeniety, there are 2 options.

  1. Avoid quantitative data synthesis and pooling studies. If clinical and methodological heterogeneity are substantial, then a quantitative data synthesis shuld not be peformed.

  2. Choosing to pool the data, while exploring heterogeneity. Heterogeneity can be explored through sub-group analysis or metaregression to help identify study-level effect modifiers. This is where the outcome varies in different population or intervention characteristics. Such sub-group and metaregression analyses are best be pre-specified, and regardless they shoud be interpreted with caution and considered hypothesis generating.

Subgroup analyses require splitting of the data into subgroups to make comparison. Typically this data is hard to extract from the published literature, and thus are better utilised when individual patient level data are available for pooling. Nonetheless, we will perform the sub-group meta-analysis above to explore heterogeneity and consider the limitations of the analyses.

Meta-regression allows the effects of multiple continuous and categorical variables to be investigated simultaneously, unlike subgroup analysis which considers one categorical variable only. This generally utilises a random effect model to conduct the analysis in each subgroup, and then considers additional statistical testing to compare the pooled results across the subgroups. Meta-regression should generally not be considered when there are less than ten studies in a meta-analysis. The meta-regression cooeffient obtained describes how the outcome (dependent variable) changes withn unit increase in the potential effect modifier. If the outcome is a ratio measure, the log-transformed value should be used in the regression model. Cochrane Handbook 10.11.4

Meta-regression and sub-group analysis are non-randomized and observational in nature. It may not be possible to ajust for all potential confounders and thus they can can lead to misleading conclusions. Even if there are a large number of covariates adjusted for, we cannot be certain that all potential confounders have been identified. These analyses cannot prove causality, and at best, they can be considered hypothesis generating.

Moving forward, we shall choose to pool the data, and explore heterogeneity with sub-group analyses and meta-regression.

Sub-group analyses

  1. Post hoc sub-group analysis of rupture risk comparing prospective studies to retrospective studies.
  2. Prespecified sub-group analysis of rupture risk by size of aneurysm (7mm and less, 5mm and less, and 3mm and less)
  3. Prespecified sub-group analysis of rupture risk by size of aneurysm by exposure to prior subarachnoid haemorrhage.
  4. Post hoc sub-group analysis of rupture risk with length of follow up categorised as intermediate (5 years or less), or long term (>5 years)

Meta-regression

  1. Prespecified metagression to consider whether proportion of patients with exposure to prior SAH in the studies was an important source of heterogeneity.
  2. Prespecified metagression to consider whether proportion of patients with aneurysms 5mm and less in the studies was an important source of heterogeneity.
  3. Prespecified metagression to consider whether proportion of patients with aneurysms 3mm and less in the studies was an important source of heterogeneity.
  4. Post hoc metagression to consider whether duration of follow up in the studies analysed as a continuous variable was an important source of heterogeneity.
  5. Post hoc metagression to consider whether year of last enrollment in the studies analysed was an important source of heterogeneity.

Sensitivity analysis

  1. Post hoc sensitivity analysis to consider whether the pooled rupture risk varies with utilisation of a fixed or random effects meta-analysis method.
  2. Post hoc sensitivity analysis to consider whether the pooled rupture risk varies with exclusion of studies rated as poor or fair quality using AHRQ thresholds of NOS quality scoring.
  3. Post hoc sensitivity analysis to consider whether the pooled rupture risk varies with exclusion of studies with sample sizes of less than 500 aneurysms.
  4. Post hoc sensitivity analysis to consider whether the pooled rupture risk varies with exclusion of studie that are identified as contributing considerably to the overall heterogeneity and having a strong influence on the overall result using a Baujat plot.
  5. Repeat metagression with exlusion of Juvela et al to consider whether proportion of patients with exposure to prior SAH in the study was an important source of heterogeneity.
  6. Repeat metagression with exlusion of Juvela et al to consider whether duration of follow up in the study analysed as a continuous variable was an important source of heterogeneity
  7. Repeat metagression with exlusion of Juvela et al to consider whether year of last enrollment in the study analysed as a continuous variable was an important source of heterogeneity
  8. Post hoc multivariable metaregression to consider whether inclusion of 2 covariates - proportion of patients with exposure to prior SAH in the study and year of last enrollment in the study - was associated with pooled rupture risk and a source of heterogeniety.

To reduce the risk of false positives, and to ensure that there are adequate studies to consider pos hoc meta-regression, only one posthoc potential effect modifier is considered for metaregression each time, and in the multivariable model only 2 potential effect modifiers are considered.

Regardless, the outcomes of these subgroup analysis or meta-regression analyses are limited. They are entirely observational, susceptible to confounding bias from other study level characteristics, the level of statistical significance of the results within subgroups cannot be compared, and may not be generalisable since there is aggregation bias due to study-level data being used for analysis and not patient level data.

Sub-group analysis based on study type - retrospective compared to prospective

pes.summary.glmm.type = metaprop(rupt, total_size,
                            data=dat,
                            studlab=paste(auth_year),
                            byvar = type,
                            bylab = "Study Type",
                            method="GLMM",
                            sm="PLOGIT",
                            method.tau = "ML", 
                            method.ci = "WS",
                            pscale = 100
                            ) 
pes.summary.glmm.type
##                   events             95%-CI    Study Type
## Bor 2015          0.7444 [ 0.2535;  2.1655]   prospective
## Broderick 2009    1.8519 [ 0.5093;  6.5019]   prospective
## Burns 2009        0.5780 [ 0.1021;  3.2011] retrospective
## Byoun 2016        1.7628 [ 0.9871;  3.1288] retrospective
## Choi 2018         0.5780 [ 0.1021;  3.2011] retrospective
## Gibbs 2004        0.0000 [ 0.0000; 14.8655] retrospective
## Gondar 2016       0.8152 [ 0.2776;  2.3691]   prospective
## Guresir 2013      0.7812 [ 0.2660;  2.2715] retrospective
## Irazabal 2011     0.0000 [ 0.0000;  7.8652] retrospective
## Jeon 2014         0.3521 [ 0.0966;  1.2746] retrospective
## Jiang 2013        0.0000 [ 0.0000;  7.1348] retrospective
## Juvela 2013      18.6747 [13.4796; 25.2868]   prospective
## Loumiotis 2011    0.0000 [ 0.0000;  2.3446]   prospective
## Matsubara 2004    0.0000 [ 0.0000;  2.3736] retrospective
## Matsumoto 2013    2.6549 [ 0.9069;  7.5160] retrospective
## Mizoi 1995        0.0000 [ 0.0000; 15.4639] retrospective
## Morita 2012       1.8658 [ 1.4582;  2.3845]   prospective
## Murayama 2016     2.2384 [ 1.6660;  3.0014]   prospective
## Oh 2013           0.0000 [ 0.0000; 16.8179] retrospective
## Serrone 2016      0.5155 [ 0.0911;  2.8615] retrospective
## So 2010           1.1450 [ 0.3902;  3.3118] retrospective
## Sonobe 2010       1.5625 [ 0.7589;  3.1897]   prospective
## Teo 2016          2.3810 [ 0.8130;  6.7666] retrospective
## Thien 2017        0.6173 [ 0.1090;  3.4133] retrospective
## Tsukahara 2005    3.4722 [ 1.4921;  7.8703] retrospective
## Tsutsumi 2000     4.3478 [ 1.4896; 12.0212] retrospective
## Villablanca 2013  1.5544 [ 0.5300;  4.4697] retrospective
## Wiebers-R 1998    1.3503 [ 0.8558;  2.1244] retrospective
## Wilkinson 2018    0.0000 [ 0.0000; 14.8655] retrospective
## Zylkowski 2015    2.7273 [ 0.9318;  7.7131] retrospective
## 
## Number of studies combined: k = 30
## 
##                      events           95%-CI
## Fixed effect model   1.7872 [1.5638; 2.0419]
## Random effects model 1.2112 [0.7844; 1.8659]
## 
## Quantifying heterogeneity:
##  tau^2 = 0.7974; tau = 0.8930; I^2 = 82.7%; H = 2.41
## 
## Quantifying residual heterogeneity:
##  I^2 = 81.8% [74.7%; 86.9%]; H = 2.34 [1.99; 2.76]
## 
## Test of heterogeneity:
##       Q d.f.  p-value             Test
##  170.38   29 < 0.0001        Wald-type
##  148.41   29 < 0.0001 Likelihood-Ratio
## 
## Results for subgroups (fixed effect model):
##                              k events           95%-CI      Q   I^2
## Study Type = prospective     8 2.1894 [1.8694; 2.5627] 134.07 95.2%
## Study Type = retrospective  22 1.2286 [0.9571; 1.5759]  19.68 24.4%
## 
## Test for subgroup differences (fixed effect model):
##                     Q d.f.  p-value
## Between groups  14.77    1   0.0001
## Within groups  153.76   28 < 0.0001
## 
## Results for subgroups (random effects model):
##                              k events           95%-CI  tau^2    tau
## Study Type = prospective     8 1.6586 [0.6769; 4.0068] 1.3809 1.1751
## Study Type = retrospective  22 1.1668 [0.8213; 1.6552] 0.1230 0.3507
## 
## Test for subgroup differences (random effects model):
##                     Q d.f. p-value
## Between groups   0.52    1  0.4725
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

There is greater imprecision in the result for prospective studies with very high heterogeniety. Retrospective studies have less heterogeneity and narrower confidence intervals, but are subject to greater degrees of bias.

forest(pes.summary.glmm.type,
       layout = "meta",
       comb.fixed = FALSE,
       comb.random = TRUE,
       leftlabs = c("Study", "Ruptures", "Total"),
       rightcols = c("effect", "ci"),
       rightlabs = c("Ruptures per 100", "95% CI"),
       smlab = " ",
       xlim=c(0,10),
       xlab = "Rupture Proportion per 100",
       pooled.events = TRUE,
       ) 

sub-group analysis based on aneurysm size 7 mm and less

sizedata7 <- filter(maindata, size == 7) 
dat7 <- sizedata7 %>%
  mutate(prop_multi = multi_tot / num_tot) %>%
  mutate(num_multi = prop_multi * num + num) %>%
  mutate(num_multi_temp = coalesce(num_anr, num_multi)) %>%
  mutate(total_size_temp = coalesce(num_anr, num)) %>%
  mutate(total_size_temp_2 = coalesce(num_multi_temp, total_size_temp)) %>%
  mutate(total_size = round(total_size_temp_2, 0)) %>%
  drop_na(total_size) %>% 
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  select(auth_year, rupt, total_size, type)

Meta-analysis of proportions of 7 mm aneurysms and less using GLMM and Wilson CIs

pes.summary.glmm7 = metaprop(rupt, total_size,
                            data=dat7,
                            studlab=paste(auth_year),
                            method="GLMM",
                            sm="PLOGIT",
                            method.tau = "ML", 
                            method.ci = "WS",
                            pscale = 100
                            ) 
pes.summary.glmm7
##                   events             95%-CI
## Bor 2015          0.4963 [ 0.1362;  1.7912]
## Broderick 2009    1.8519 [ 0.5093;  6.5019]
## Byoun 2016        1.8613 [ 1.0424;  3.3018]
## Choi 2018         0.5780 [ 0.1021;  3.2011]
## Gibbs 2004        0.0000 [ 0.0000; 14.8655]
## Gondar 2016       0.8152 [ 0.2776;  2.3691]
## Guresir 2013      0.7812 [ 0.2660;  2.2715]
## Irazabal 2011     0.0000 [ 0.0000;  8.2010]
## Jeon 2014         0.3521 [ 0.0966;  1.2746]
## Jiang 2013        0.0000 [ 0.0000;  8.7622]
## Juvela 2013      16.7785 [11.6308; 23.5961]
## Matsubara 2004    0.0000 [ 0.0000;  2.9815]
## Matsumoto 2013    0.8850 [ 0.1564;  4.8431]
## Mizoi 1995        0.0000 [ 0.0000; 15.4639]
## Morita 2012       1.2933 [ 0.9397;  1.7774]
## Murayama 2016     2.0679 [ 1.5164;  2.8142]
## Oh 2013           0.0000 [ 0.0000; 21.5311]
## Serrone 2016      0.0000 [ 0.0000;  1.9417]
## So 2010           0.4695 [ 0.0829;  2.6110]
## Sonobe 2010       1.5625 [ 0.7589;  3.1897]
## Teo 2016          2.3810 [ 0.8130;  6.7666]
## Thien 2017        0.0000 [ 0.0000;  2.5637]
## Tsukahara 2005    1.8692 [ 0.5141;  6.5604]
## Tsutsumi 2000     3.3333 [ 0.9189; 11.3638]
## Villablanca 2013  1.5544 [ 0.5300;  4.4697]
## Wiebers-P 2003    0.8580 [ 0.4520;  1.6225]
## Wilkinson 2018    0.0000 [ 0.0000; 16.1125]
## Zylkowski 2015    2.7273 [ 0.9318;  7.7131]
## 
## Number of studies combined: k = 28
## 
##                      events           95%-CI
## Fixed effect model   1.4808 [1.2670; 1.7300]
## Random effects model 1.0186 [0.6279; 1.6483]
## 
## Quantifying heterogeneity:
##  tau^2 = 0.8625; tau = 0.9287; I^2 = 80.7%; H = 2.28
## 
## Test of heterogeneity:
##       Q d.f.  p-value             Test
##  143.68   27 < 0.0001        Wald-type
##  126.74   27 < 0.0001 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

Here we can see that the I^2 = 82.6% within the sub-group, which means that there remains high between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, we cannot accurately estimate the pooled rupture risk.

Publication quality forest plots for 7mm and less

forest(pes.summary.glmm7,
       layout = "meta",
       comb.fixed = FALSE,
       comb.random = TRUE,
       leftlabs = c("Study", "Ruptures", "Total"),
       rightcols = c("effect", "ci"),
       rightlabs = c("Ruptures per 100", "95% CI"),
       smlab = " ",
       xlim=c(0,10),
       xlab = "Rupture Proportion per 100",
       pooled.events = TRUE,
       ) 

sub-group analysis based on aneurysm size 5 mm and less

sizedata5 <- filter(maindata, size == 5) 
dat5 <- sizedata5 %>%
  mutate(prop_multi = multi_tot / num_tot) %>%
  mutate(num_multi = prop_multi * num + num) %>%
  mutate(num_multi_temp = coalesce(num_anr, num_multi)) %>%
  mutate(total_size_temp = coalesce(num_anr, num)) %>%
  mutate(total_size_temp_2 = coalesce(num_multi_temp, total_size_temp)) %>%
  mutate(total_size = round(total_size_temp_2, 0)) %>%
  drop_na(total_size) %>% 
  drop_na(rupt) %>%
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  select(auth_year, rupt, total_size, type)

Subgroup meta-analysis of proportions of 5 mm aneurysms and less using GLMM and Wilson CIs

pes.summary.glmm5 = metaprop(rupt, total_size,
                            data=dat5,
                            studlab=paste(auth_year),
                            method="GLMM",
                            sm="PLOGIT",
                            method.tau = "ML", 
                            method.ci = "WS",
                            pscale = 100
                            ) 
pes.summary.glmm5
##                 events             95%-CI
## Bor 2015        0.7435 [ 0.2041;  2.6699]
## Broderick 2009  1.3889 [ 0.2456;  7.4566]
## Gibbs 2004      0.0000 [ 0.0000; 16.8179]
## Gondar 2016     0.9091 [ 0.3096;  2.6383]
## Guresir 2013    1.0563 [ 0.3599;  3.0592]
## Irazabal 2011   0.0000 [ 0.0000; 10.1515]
## Jeon 2014       0.3521 [ 0.0966;  1.2746]
## Jiang 2013      0.0000 [ 0.0000; 16.8179]
## Juvela 2013    16.6667 [11.2717; 23.9469]
## Matsubara 2004  0.0000 [ 0.0000;  2.9815]
## Matsumoto 2013  1.2658 [ 0.2238;  6.8276]
## Mizoi 1995      0.0000 [ 0.0000; 15.4639]
## Morita 2012     1.1500 [ 0.7675;  1.7198]
## Murayama 2016   1.2813 [ 0.8477;  1.9325]
## Oh 2013         0.0000 [ 0.0000; 22.8095]
## Serrone 2016    0.0000 [ 0.0000;  7.4100]
## So 2010         0.4695 [ 0.0829;  2.6110]
## Sonobe 2010     1.5625 [ 0.7589;  3.1897]
## Thien 2017      0.0000 [ 0.0000;  2.5637]
## Tsukahara 2005  1.8692 [ 0.5141;  6.5604]
## Tsutsumi 2000   3.3333 [ 0.9189; 11.3638]
## Wilkinson 2018  0.0000 [ 0.0000; 16.8179]
## Zylkowski 2015  2.1739 [ 0.5982;  7.5835]
## 
## Number of studies combined: k = 23
## 
##                      events           95%-CI
## Fixed effect model   1.3646 [1.1149; 1.6693]
## Random effects model 0.9640 [0.5275; 1.7552]
## 
## Quantifying heterogeneity:
##  tau^2 = 0.9813; tau = 0.9906; I^2 = 77.6%; H = 2.11
## 
## Test of heterogeneity:
##       Q d.f.  p-value             Test
##  121.40   22 < 0.0001        Wald-type
##   97.52   22 < 0.0001 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

Here we can see that the I^2 = 79.8% within the sub-group, which means that there remains high between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, we cannot accurately estimate the pooled rupture risk.

Publication quality forest plots for 5mm and less

forest(pes.summary.glmm5,
       layout = "meta",
       comb.fixed = FALSE,
       comb.random = TRUE,
       leftlabs = c("Study", "Ruptures", "Total"),
       rightcols = c("effect", "ci"),
       rightlabs = c("Ruptures per 100", "95% CI"),
       smlab = " ",
       xlim=c(0,10),
       xlab = "Rupture Proportion per 100",
       pooled.events = TRUE,
       ) 

sub-group analysis based on aneurysm size 3 mm and less

sizedata3 <- filter(maindata, size == 3) 
dat3 <- sizedata3 %>%
  mutate(prop_multi = multi_tot / num_tot) %>%
  mutate(num_multi = prop_multi * num + num) %>%
  mutate(num_multi_temp = coalesce(num_anr, num_multi)) %>%
  mutate(total_size_temp = coalesce(num_anr, num)) %>%
  mutate(total_size_temp_2 = coalesce(num_multi_temp, total_size_temp)) %>%
  mutate(total_size = round(total_size_temp_2, 0)) %>%
  drop_na(total_size) %>% 
  drop_na(rupt) %>%
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  select(auth_year, rupt, total_size, type)

subgroup meta-analysis of proportions of 3 mm aneurysms and less using GLMM and Wilson CIs

pes.summary.glmm3 = metaprop(rupt, total_size,
                            data=dat3,
                            studlab=paste(auth_year),
                            method="GLMM",
                            control=list(stepadj=0.5,maxiter=1000),
                            sm="PLOGIT",
                            method.tau = "ML", 
                            method.ci = "WS",
                            pscale = 100
                            ) 
pes.summary.glmm3
##                 events             95%-CI
## Bor 2015        3.0303 [ 0.5369; 15.3187]
## Broderick 2009  1.3889 [ 0.2456;  7.4566]
## Gibbs 2004      0.0000 [ 0.0000; 24.2494]
## Gondar 2016     0.5376 [ 0.0950;  2.9821]
## Guresir 2013    1.6000 [ 0.4399;  5.6463]
## Irazabal 2011   0.0000 [ 0.0000; 15.4639]
## Jiang 2013      0.0000 [ 0.0000; 16.8179]
## Juvela 2013    23.8095 [14.9938; 35.6357]
## Matsumoto 2013  0.0000 [ 0.0000;  4.6371]
## Mizoi 1995      0.0000 [ 0.0000; 15.4639]
## Oh 2013         0.0000 [ 0.0000; 56.1497]
## Serrone 2016    0.0000 [ 0.0000;  7.4100]
## So 2010         1.6393 [ 0.2900;  8.7189]
## Sonobe 2010     1.6129 [ 0.4434;  5.6903]
## Wilkinson 2018  0.0000 [ 0.0000; 17.5879]
## Zylkowski 2015  0.0000 [ 0.0000; 11.6970]
## 
## Number of studies combined: k = 16
## 
##                      events           95%-CI
## Fixed effect model   2.5164 [1.6778; 3.7581]
## Random effects model 0.8725 [0.2620; 2.8644]
## 
## Quantifying heterogeneity:
##  tau^2 = 2.0253; tau = 1.4231; I^2 = 70.3%; H = 1.84
## 
## Test of heterogeneity:
##      Q d.f.  p-value             Test
##  44.32   15 < 0.0001        Wald-type
##  62.51   15 < 0.0001 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

Here we can see that the I^2 = 72.9% within the sub-group, which means that there remains high between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, we cannot accurately estimate the pooled rupture risk.

Note that the Fisher scoring algorith failed to converge to calculate the tau2 using the maximum-likelihood estimator after the default 100 iterations; this also fails after attempting 1000 iterations. This was be corrected by reducing the step length, and the model converges.

Another option to consider is usting a penalised maximum likelihood estimation using the Firth method. The penalisation allows for convergence to finite estimates even with very sparse data.

Publication quality forest plots for 3mm and less

forest(pes.summary.glmm3,
       layout = "meta",
       comb.fixed = FALSE,
       comb.random = TRUE,
       leftlabs = c("Study", "Ruptures", "Total"),
       rightcols = c("effect", "ci"),
       rightlabs = c("Ruptures per 100", "95% CI"),
       smlab = " ",
       xlim=c(0,10),
       xlab = "Rupture Proportion per 100",
       pooled.events = TRUE,
       ) 

Sub-group meta-analysis of proportions for risk of rupture in patients with and without exposure to prior SAH

Firstly structure the data in individual studies with authors in a 2 x 2 table

ai = aneuryms with exposure to prior SAH and rupture +ve = variable rupt_psah bi = aneuryms with exposure to prior SAH and rupture -ve ci = aneuryms with no exposure to prior SAH, and rupture +ve = rupt minus rupt_psah di = aneuryms with no exposure to prior SAH, and rupture -ve

n1i = ai + bi = total aneurysms with prior SAH n2i = ci + di = total aneurysms without prior SAH

n1i + n2i = total_anr included with and without prior SAH

total number of events = total number of ruptures = variable rupt

Assumptions:

  1. Only 1 aneurysm ruptures per patient.
  2. If the patients of patients with prior is SAH is unknown, then the proportion of patients with prior SAH in the total observation cohort of all aneurysms is carried forward and applied to the number of aneurysms, and an estimated number of patients with prior SAH calculated based on the total observation cohort.
  3. Aneurysm mutiplicity is not taken into account, to avoid multiple assumptions regarding proportion with prior SAH and proportion with multiple aneurysms and to avoid greater inaccuracy in this analysis.
  4. Thus it is assumed for this analysis that each patient has 1 aneurysm.
  5. Data analysis is limited to studies in which there are known or calculated values of ai, bi, ci, and di using the assumptions. If there are NAs in the 2 x 2 table, then that study is excluded.
dat.psah <- sizedata %>%
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  mutate(total_anr = coalesce(num_anr,num)) %>%
  drop_na(total_anr) %>%
  rename(ai = rupt_psah) %>%
  rename(rupt.total = rupt) %>%
  mutate(ci = rupt.total - ai) %>%
  rename(n1i.temp = psah) %>%
  mutate(prop = psah_tot / num_tot) %>%
  mutate(num_anr_psah = prop * total_anr) %>%
  mutate(n1i = coalesce(n1i.temp,num_anr_psah)) %>%
  mutate(n2i = total_anr - n1i) %>%
  mutate(bi = n1i - ai) %>%
  mutate(di = n2i - ci) %>%
  select(auth_year, ai, bi, ci, di, n1i, n2i) %>%
  drop_na(ai, bi, ci, di) %>%
  mutate_if(is.numeric, round, 0)

then create new tibble for patients with and without history of prior subarachnoid haemorrhage.

dat.psahpos <- dat.psah %>%
  filter(n1i!=0) 

dat.psahneg <- dat.psah %>%
  filter(n2i!=0) 

run new GLMM (random intercept logistic regression model) for patients with prior history of subaarachnoid haemorrhage. Studies that did not include any patients with prior history of subarachnoid haemorrage are excluded.

pes.summary.psahpos = metaprop(ai, n1i,
                            data=dat.psahpos,
                            studlab=paste(auth_year),
                            method="GLMM",
                            sm="PLOGIT",
                            method.tau = "ML", 
                            method.ci = "WS",
                            pscale = 100
                            ) 
pes.summary.psahpos
##                 events             95%-CI
## Gondar 2016     4.7619 [ 0.8456; 22.6694]
## Juvela 2013    23.2558 [16.8036; 31.2548]
## Matsubara 2004  0.0000 [ 0.0000; 39.0334]
## Mizoi 1995      0.0000 [ 0.0000; 65.7620]
## Serrone 2016    0.0000 [ 0.0000; 65.7620]
## Sonobe 2010     2.7778 [ 0.4920; 14.1697]
## Teo 2016        0.0000 [ 0.0000;  8.3799]
## Tsukahara 2005  0.0000 [ 0.0000; 11.3513]
## Wiebers-R 1998  2.6521 [ 1.6623;  4.2060]
## Wilkinson 2018  0.0000 [ 0.0000; 56.1497]
## Zylkowski 2015  4.5455 [ 0.8069; 21.7980]
## 
## Number of studies combined: k = 11
## 
##                      events           95%-CI
## Fixed effect model   5.3533 [4.0803; 6.9946]
## Random effects model 2.7228 [0.8087; 8.7663]
## 
## Quantifying heterogeneity:
##  tau^2 = 1.4325; tau = 1.1969; I^2 = 79.6%; H = 2.22
## 
## Test of heterogeneity:
##      Q d.f.  p-value             Test
##  58.74   10 < 0.0001        Wald-type
##  67.82   10 < 0.0001 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

Here we can see that the I^2 = 79.6% within the sub-group, which means that there remains high between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, we cannot accurately estimate the pooled rupture risk.

In addition, the confidence intervals are wide, and driven primarily by 2 studies. This is probably described qualitatively rather than displayed using a forest plot, but one is constructed below for interest.

forest(pes.summary.psahpos,
       layout = "meta",
       comb.fixed = FALSE,
       comb.random = TRUE,
       leftlabs = c("Study", "Ruptures", "Total"),
       rightcols = c("effect", "ci"),
       rightlabs = c("Ruptures per 100", "95% CI"),
       smlab = " ",
       xlim=c(0,30),
       xlab = "Rupture Proportion per 100",
       pooled.events = TRUE,
       ) 

Then run new GLMM (random intercept logistic regression model) for patients without history of PSAH

pes.summary.psahneg = metaprop(ci, n2i,
                            data=dat.psahneg,
                            studlab=paste(auth_year),
                            method="GLMM",
                            sm="PLOGIT",
                            method.tau = "ML", 
                            method.ci = "WS",
                            pscale = 100
                            ) 
pes.summary.psahneg
##                 events            95%-CI
## Broderick 2009  1.8519 [0.5093;  6.5019]
## Gibbs 2004      0.0000 [0.0000; 14.8655]
## Gondar 2016     0.5764 [0.1582;  2.0768]
## Guresir 2013    0.7812 [0.2660;  2.2715]
## Irazabal 2011   0.0000 [0.0000;  7.8652]
## Jeon 2014       0.3521 [0.0966;  1.2746]
## Jiang 2013      0.0000 [0.0000;  7.1348]
## Juvela 2013    16.6667 [3.0053; 56.3503]
## Loumiotis 2011  0.0000 [0.0000;  2.3446]
## Matsubara 2004  0.0000 [0.0000;  2.4650]
## Mizoi 1995      0.0000 [0.0000; 16.8179]
## Oh 2013         0.0000 [0.0000; 16.8179]
## Serrone 2016    0.5208 [0.0920;  2.8907]
## Sonobe 2010     1.4563 [0.6691;  3.1404]
## Teo 2016        3.5714 [1.2220;  9.9817]
## Thien 2017      0.6173 [0.1090;  3.4133]
## Tsukahara 2005  4.3860 [1.8878;  9.8581]
## Tsutsumi 2000   5.3571 [1.8386; 14.6073]
## Wiebers-R 1998  0.2358 [0.0416;  1.3237]
## Wilkinson 2018  0.0000 [0.0000; 16.8179]
## Zylkowski 2015  2.2727 [0.6255;  7.9125]
## 
## Number of studies combined: k = 21
## 
##                      events           95%-CI
## Fixed effect model   0.9327 [0.6603; 1.3159]
## Random effects model 0.8594 [0.4770; 1.5437]
## 
## Quantifying heterogeneity:
##  tau^2 = 0.7093; tau = 0.8422; I^2 = 53.2%; H = 1.46
## 
## Test of heterogeneity:
##      Q d.f. p-value             Test
##  31.20   20  0.0526        Wald-type
##  40.42   20  0.0044 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

Here we can see that the I^2 = 53.2% within the sub-group, which means that there remains moderate between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, we cannot accurately estimate the pooled rupture risk.

A forest plot is constructed for rupture risk in patients without history of prior SAH below.

forest(pes.summary.psahneg,
       layout = "meta",
       comb.fixed = FALSE,
       comb.random = TRUE,
       leftlabs = c("Study", "Ruptures", "Total"),
       rightcols = c("effect", "ci"),
       rightlabs = c("Ruptures per 100", "95% CI"),
       smlab = " ",
       xlim=c(0,10),
       xlab = "Rupture Proportion per 100",
       pooled.events = TRUE,
       ) 

Subgroup analyis for length of follow up

A clinical hypothesis to explore is that the proportion of patients that rupture may be associated with the length of follow up in the study.

This exploratory analysis considers the proportion of ruptures that occur in studies with intermediate length of follow up defined as 5 years or less, and long term follow up defined as more than 5 years. 5 Years is chosen as it is a relatively common measure for patient level discussions about risk vs benefit across a number of fields of medicine.

dat.fu <- sizedata %>%
  mutate(fu = coalesce(fu_mean_tot,fu_med_tot)) %>%
  mutate(total_size = coalesce(num_anr,num)) %>%
  drop_na(total_size) %>% 
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  select(auth_year, rupt, total_size, fu) 

Calculate mean and median follow up in included studies

dat.fu.mean <- dat.fu %>% 
  drop_na(fu) %>%
  summarise(mean = mean(fu, na.rm = TRUE))
dat.fu.mean
## # A tibble: 1 x 1
##    mean
##   <dbl>
## 1  51.0
dat.fu.median <- dat.fu %>% 
  drop_na(fu) %>%
  summarise(median = median(fu, na.rm = TRUE))
dat.fu.median
## # A tibble: 1 x 1
##   median
##    <dbl>
## 1   38.4

Mean follow up length across included studies is 51 months, and median is 38 months. It seems more appropriate to utilise the means as a summary compared to the median.

Now that the column with length of follow up is created, we can perform a subgroup meta-analysis of studies with intermediate and long term follow up.

dat.fu.int <- dat.fu %>%
  filter(fu < 60)

pes.summary.glmmint = metaprop(rupt, total_size,
                            data=dat.fu.int,
                            studlab=paste(auth_year),
                            method="GLMM",
                            sm="PLOGIT",
                            method.tau = "ML", 
                            method.ci = "WS",
                            pscale = 100
                            ) 
pes.summary.glmmint
##                  events            95%-CI
## Bor 2015         0.7444 [0.2535;  2.1655]
## Burns 2009       0.5780 [0.1021;  3.2011]
## Byoun 2016       1.7628 [0.9871;  3.1288]
## Gondar 2016      0.8152 [0.2776;  2.3691]
## Guresir 2013     0.7812 [0.2660;  2.2715]
## Jeon 2014        0.3521 [0.0966;  1.2746]
## Jiang 2013       0.0000 [0.0000;  7.1348]
## Loumiotis 2011   0.0000 [0.0000;  2.3446]
## Matsubara 2004   0.0000 [0.0000;  2.3736]
## Mizoi 1995       0.0000 [0.0000; 15.4639]
## Morita 2012      1.8658 [1.4582;  2.3845]
## Murayama 2016    2.2384 [1.6660;  3.0014]
## Oh 2013          0.0000 [0.0000; 16.8179]
## Serrone 2016     0.5155 [0.0911;  2.8615]
## So 2010          1.1450 [0.3902;  3.3118]
## Sonobe 2010      1.5625 [0.7589;  3.1897]
## Teo 2016         2.3810 [0.8130;  6.7666]
## Thien 2017       0.6173 [0.1090;  3.4133]
## Tsutsumi 2000    5.3571 [1.8386; 14.6073]
## Villablanca 2013 1.5544 [0.5300;  4.4697]
## Zylkowski 2015   2.7273 [0.9318;  7.7131]
## 
## Number of studies combined: k = 21
## 
##                      events           95%-CI
## Fixed effect model   1.5633 [1.3349; 1.8300]
## Random effects model 1.1643 [0.8122; 1.6665]
## 
## Quantifying heterogeneity:
##  tau^2 = 0.1944; tau = 0.4409; I^2 = 52.5%; H = 1.45
## 
## Test of heterogeneity:
##      Q d.f. p-value             Test
##  23.26   20  0.2764        Wald-type
##  42.78   20  0.0022 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

Here we can see that the I^2 = 52.5% within the sub-group, which means that there remains moderate between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, we cannot accurately estimate the pooled rupture risk.

Subgroup forest plots for patients with less than 5 years of follow up

forest(pes.summary.glmmint,
       layout = "meta",
       comb.fixed = FALSE,
       comb.random = TRUE,
       leftlabs = c("Study", "Ruptures", "Total"),
       rightcols = c("effect", "ci"),
       rightlabs = c("Ruptures per 100", "95% CI"),
       smlab = " ",
       xlim=c(0,10),
       xlab = "Rupture Proportion per 100",
       pooled.events = TRUE,
       ) 

Meta-analysis of proportions for patients with 5 years or more of follow up

dat.fu.long <- dat.fu %>%
  filter(fu > 60)

pes.summary.glmmlong = metaprop(rupt, total_size,
                            data=dat.fu.long,
                            studlab=paste(auth_year),
                            method="GLMM",
                            sm="PLOGIT",
                            method.tau = "ML", 
                            method.ci = "WS",
                            pscale = 100
                            ) 
pes.summary.glmmlong
##                 events             95%-CI
## Choi 2018       0.5780 [ 0.1021;  3.2011]
## Gibbs 2004      0.0000 [ 0.0000; 14.8655]
## Irazabal 2011   0.0000 [ 0.0000;  7.8652]
## Juvela 2013    22.9630 [16.6751; 30.7469]
## Wiebers-R 1998  1.6901 [ 1.0717;  2.6558]
## Wilkinson 2018  0.0000 [ 0.0000; 14.8655]
## 
## Number of studies combined: k = 6
## 
##                      events           95%-CI
## Fixed effect model   3.4200 [2.6014; 4.4843]
## Random effects model 1.0762 [0.1234; 8.7415]
## 
## Quantifying heterogeneity:
##  tau^2 = 3.6011; tau = 1.8976; I^2 = 94.5%; H = 4.27
## 
## Test of heterogeneity:
##      Q d.f.  p-value             Test
##  89.93    5 < 0.0001        Wald-type
##  95.45    5 < 0.0001 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

Here we can see that the I^2 = 94.5% within the sub-group, which means that there is high between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, we cannot accurately estimate the pooled rupture risk. Moreover, there are very few studies in this subgroup and the effect is driven mainly by 1 study.

This is best described qualitatively, however a forest plot is constructed below for interest.

forest(pes.summary.glmmlong,
       layout = "meta",
       comb.fixed = FALSE,
       comb.random = TRUE,
       leftlabs = c("Study", "Ruptures", "Total"),
       rightcols = c("effect", "ci"),
       rightlabs = c("Ruptures per 100", "95% CI"),
       smlab = " ",
       xlim=c(0,10),
       xlab = "Rupture Proportion per 100",
       pooled.events = TRUE,
       ) 

The data for risk of rupture beyond 5 years is extremely sparse, and quite imprecise. Pooling is not considered appropriate, and forest plots are not required. The results will be described qualitatively.

It is noted however, that the result in the long term follow up subgroup may be due to mainly patients with prior history of SAH and long term follow up. Explore this by examining only patients with prior SAH and long term follow up.

dat.psah.fu <- sizedata %>%
  mutate(fu = coalesce(fu_mean_tot,fu_med_tot)) %>%
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  mutate(total_anr = coalesce(num_anr,num)) %>%
  drop_na(total_anr) %>%
  rename(ai = rupt_psah) %>%
  rename(rupt.total = rupt) %>%
  mutate(ci = rupt.total - ai) %>%
  rename(n1i.temp = psah) %>%
  mutate(prop = psah_tot / num_tot) %>%
  mutate(num_anr_psah = prop * total_anr) %>%
  mutate(n1i = coalesce(n1i.temp,num_anr_psah)) %>%
  mutate(n2i = total_anr - n1i) %>%
  mutate(bi = n1i - ai) %>%
  mutate(di = n2i - ci) %>%
  select(auth_year, ai, bi, ci, di, n1i, n2i, fu) %>%
  drop_na(ai, bi, ci, di) %>%
  mutate_if(is.numeric, round, 0)

How about patients with intermediate follow up?

dat.psah.fu.int <- dat.psah.fu %>%
  filter(fu < 60)

How about patients with long term follow up?

dat.psah.fu.long <- dat.psah.fu %>%
  filter(fu > 60)

Examine dat.psah.fu.long and review ai and ci.

ci = patients without prior history of SAH who were included in studies with greater than 5 years of follow up who susbsequently ruptured.

See that only 2 patients without history of prior SAH ruptured on long term follow up. Although the data are sparse, there is minimal extractable data on the outcomes of unruptured aneurysms beyond 5 years.

Meta-regression

Exploratory meta-regression to explore length of follow up on rupture outcomes, including all studies

dat.fu.metareg <- sizedata %>%
  mutate(fu = coalesce(fu_mean_tot,fu_med_tot)/12) %>%
  mutate(total_size = coalesce(num_anr,num)) %>%
  drop_na(total_size) %>% 
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  select(auth_year, rupt, total_size, fu) %>%
  drop_na(fu)
fu.metareg = metaprop(rupt, total_size,
                      data=dat.fu.metareg,
                      studlab=paste(auth_year),
                      method="GLMM",
                      sm="PLOGIT",
                      method.tau = "ML", 
                      method.ci = "WS",
                      pscale = 100
                      )
fu.metareg.result <- metareg(fu.metareg, ~fu)
fu.metareg.result
## 
## Mixed-Effects Model (k = 27; tau^2 estimator: ML)
## 
## tau^2 (estimated amount of residual heterogeneity):     0.2351
## tau (square root of estimated tau^2 value):             0.4849
## I^2 (residual heterogeneity / unaccounted variability): 55.8468%
## H^2 (unaccounted variability / sampling variability):   2.2648
## 
## Tests for Residual Heterogeneity:
## Wld(df = 25) = 39.7804, p-val = 0.0307
## LRT(df = 25) = 65.9598, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 31.6461, p-val < .0001
## 
## Model Results:
## 
##          estimate      se      zval    pval    ci.lb    ci.ub 
## intrcpt   -5.0211  0.2275  -22.0670  <.0001  -5.4670  -4.5751  *** 
## fu         0.1654  0.0294    5.6255  <.0001   0.1078   0.2230  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(fu.metareg.result, studlab=dat.fu.metareg$auth_year, xlim=c(0, 25), main="Meta-regression plot for length of FU")

Overall, the metaregression result reveals the following

estimate 0.1654 (95% CI 0.1078 - 0.2230) p value <.0001

This means that for every 1-unit increase in the covariate fu, thre is a 0.17 increase in the dependent variable which is the logit transformed proportion. The p value is significant, which rejects the null hypothesis that there is no association between the covariate fu and the dependent variable.

This suggests that study median follow up duration is associated with pooled rupture risk, however, the I2 = 55.8 meaning that there remains moderate between-study variance around the regression line.

However, it does seem that this could be explained by the Juvela et al study having significant influence on the metaregression result. This can be explored with a sensitivity analysis by excluding the Juvela study.

Exploratory meta-regression to explore length of follow up on rupture outcomes- excluding Juvela

dat.fu.metareg.juvela <- sizedata %>%
  slice(-12) %>%
  mutate(fu = coalesce(fu_mean_tot,fu_med_tot)/12) %>%
  mutate(total_size = coalesce(num_anr,num)) %>%
  drop_na(total_size) %>% 
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  select(auth_year, rupt, total_size, fu) %>%
  drop_na(fu)
fu.metareg.juvela = metaprop(rupt, total_size,
                      data=dat.fu.metareg.juvela,
                      studlab=paste(auth_year),
                      method="GLMM",
                      sm="PLOGIT",
                      method.tau = "ML", 
                      method.ci = "WS",
                      pscale = 100
                      )
fu.metareg.result.juvela <- metareg(fu.metareg.juvela, ~fu)
fu.metareg.result.juvela
## 
## Mixed-Effects Model (k = 26; tau^2 estimator: ML)
## 
## tau^2 (estimated amount of residual heterogeneity):     0.1648
## tau (square root of estimated tau^2 value):             0.4060
## I^2 (residual heterogeneity / unaccounted variability): 43.2183%
## H^2 (unaccounted variability / sampling variability):   1.7611
## 
## Tests for Residual Heterogeneity:
## Wld(df = 24) = 24.5949, p-val = 0.4280
## LRT(df = 24) = 47.1112, p-val = 0.0032
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.1871, p-val = 0.6653
## 
## Model Results:
## 
##          estimate      se      zval    pval    ci.lb    ci.ub 
## intrcpt   -4.5394  0.3096  -14.6630  <.0001  -5.1462  -3.9326  *** 
## fu         0.0314  0.0726    0.4326  0.6653  -0.1108   0.1736      
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(fu.metareg.result.juvela, studlab=dat.fu.metareg.juvela$auth_year, xlim=c(0, 10), main="Meta-regression plot for FU excluding Juvela")

Once Juvela is excluded, there is no evidence that median follow up per study is associated with rupture risk.

Metaregression to explore exposure to prior SAH, all studies

We can analyse whether there is a relationship between the proportion of patients with prior SAH included in the study (potential effect modifier), and the the outcome (rupture proportion).

The choice of this potential effect modifier is:

  • Pre-specified
  • Biologically plausible
  • Supported by published observational data
  • Relevant to physicians

Since we are analysing at a study level, and we do not know the characteristics of individual patients, this is an exploratory and hypothesis generating analysis.

Note that

ai = prior SAH and rupture +ve = variable rupt_psah bi = prior SAH and rupture -ve ci = no prior SAH and rupture +ve = rupt minus rupt_psah di = no prior SAH, and rupture -ve

n1i = ai + bi = total aneurysms with prior SAH n2i = ci + di = total aneurysms without prior SAH

n1i + n2i = total_anr included with and without prior SAH

total number of events = total number of ruptures = variable rupt

dat.psah.metareg <- sizedata %>%
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  mutate(total_anr = coalesce(num_anr,num)) %>%
  drop_na(total_anr) %>%
  rename(ai = rupt_psah) %>%
  rename(rupt.total = rupt) %>%
  mutate(ci = rupt.total - ai) %>%
  rename(n1i.temp = psah) %>%
  mutate(prop = psah_tot / num_tot) %>%
  mutate(num_anr_psah = prop * total_anr) %>%
  mutate(n1i = coalesce(n1i.temp,num_anr_psah)) %>%
  mutate(n2i = total_anr - n1i) %>%
  mutate(bi = n1i - ai) %>%
  mutate(di = n2i - ci) %>%
  select(auth_year, rupt.total, total_anr, prop)  
psah.metareg = metaprop(rupt.total, total_anr,
                      data=dat.psah.metareg,
                      studlab=paste(auth_year),
                      method="GLMM",
                      sm="PLOGIT",
                      method.tau = "ML", 
                      method.ci = "WS",
                      pscale = 100
                      )

psah.metareg.result <- metareg(psah.metareg, ~prop)
## Warning in rma.glmm(xi = event[!exclude], ni = n[!exclude], data = dataset, :
## Studies with NAs omitted from model fitting.
## Warning in rma.glmm(xi = event[!exclude], ni = n[!exclude], data = dataset, :
## Some yi/vi values are NA.
psah.metareg.result
## 
## Mixed-Effects Model (k = 28; tau^2 estimator: ML)
## 
## tau^2 (estimated amount of residual heterogeneity):     0.3734
## tau (square root of estimated tau^2 value):             0.6111
## I^2 (residual heterogeneity / unaccounted variability): 65.1394%
## H^2 (unaccounted variability / sampling variability):   2.8686
## 
## Tests for Residual Heterogeneity:
## Wld(df = 26) = 66.6007, p-val < .0001
## LRT(df = 26) = 93.2441, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 21.6652, p-val < .0001
## 
## Model Results:
## 
##          estimate      se      zval    pval    ci.lb    ci.ub 
## intrcpt   -4.8492  0.2328  -20.8277  <.0001  -5.3056  -4.3929  *** 
## prop       3.2544  0.6992    4.6546  <.0001   1.8840   4.6247  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(psah.metareg.result, studlab=dat.psah.metareg$auth_year, xlim=c(0, 1), main="Meta-regression plot for prior SAH")

Here again, metaregression reveals that the proportion of patients with prior SAH included in the study (potential effect modifier) is associated with the outcome (rupture proportion). We can again explore if this association remains significant if we exclude the Juvela et al study.

Metaregression to explore exposure to prior SAH, excluding Juvela

dat.psah.metareg.juvela <- sizedata %>%
  slice(-12) %>%
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  mutate(total_anr = coalesce(num_anr,num)) %>%
  drop_na(total_anr) %>%
  rename(ai = rupt_psah) %>%
  rename(rupt.total = rupt) %>%
  mutate(ci = rupt.total - ai) %>%
  rename(n1i.temp = psah) %>%
  mutate(prop = psah_tot / num_tot) %>%
  mutate(num_anr_psah = prop * total_anr) %>%
  mutate(n1i = coalesce(n1i.temp,num_anr_psah)) %>%
  mutate(n2i = total_anr - n1i) %>%
  mutate(bi = n1i - ai) %>%
  mutate(di = n2i - ci) %>%
  select(auth_year, rupt.total, total_anr, prop)   
psah.metareg.juvela = metaprop(rupt.total, total_anr,
                      data=dat.psah.metareg.juvela,
                      studlab=paste(auth_year),
                      method="GLMM",
                      sm="PLOGIT",
                      method.tau = "ML", 
                      method.ci = "WS",
                      pscale = 100
                      )

psah.metareg.result.juvela <- metareg(psah.metareg.juvela, ~prop)
## Warning in rma.glmm(xi = event[!exclude], ni = n[!exclude], data = dataset, :
## Studies with NAs omitted from model fitting.
## Warning in rma.glmm(xi = event[!exclude], ni = n[!exclude], data = dataset, :
## Some yi/vi values are NA.
psah.metareg.result.juvela
## 
## Mixed-Effects Model (k = 27; tau^2 estimator: ML)
## 
## tau^2 (estimated amount of residual heterogeneity):     0.2152
## tau (square root of estimated tau^2 value):             0.4639
## I^2 (residual heterogeneity / unaccounted variability): 49.0587%
## H^2 (unaccounted variability / sampling variability):   1.9630
## 
## Tests for Residual Heterogeneity:
## Wld(df = 25) = 27.0668, p-val = 0.3526
## LRT(df = 25) = 50.1671, p-val = 0.0020
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 1.4687, p-val = 0.2256
## 
## Model Results:
## 
##          estimate      se      zval    pval    ci.lb    ci.ub 
## intrcpt   -4.5766  0.2382  -19.2115  <.0001  -5.0435  -4.1097  *** 
## prop       1.2824  1.0582    1.2119  0.2256  -0.7916   3.3565      
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(psah.metareg.result.juvela, studlab=dat.psah.metareg.juvela$auth_year, xlim=c(0, 1), main="Meta-regression plot for prior SAH excluding Juvela")

Once Juvela is excluded, there is no evidence that proportion of patients with prior SAH per study is associated with rupture risk.

Metaregression to explore size categorised at 5mm

We can analyse whether there is a relationship between the proportion of patients with aneurysms measuring 5mm and less included in the study (potential effect modifier), and the the outcome (rupture proportion).

The choice of this potential effect modifier is:

  • Pre-specified
  • Biologically plausible
  • Supported by published observational data
  • Relevant to physicians

Since we are analysing at a study level, and we do not know the aneurysm characteristics of individual patients, this is an exploratory and hypothesis generating analysis.

sizedata10 <- filter(maindata, size == 10)

dat10.metareg <- sizedata10 %>%
  mutate(total_size10 = coalesce(num_anr,num)) %>%
  drop_na(total_size10) %>% 
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  select(auth_year, rupt, total_size10) %>%
  rename(rupt10 = rupt)

dat5.metareg <- dat5 %>%
  rename(rupt5 = rupt) %>%
  rename(total_size5 = total_size) 

dat.size5.metareg <- left_join(dat5.metareg, dat10.metareg) %>%
  mutate(prop_size5 = total_size5 / total_size10)
## Joining, by = "auth_year"
size5.metareg = metaprop(rupt10, total_size10,
                      data=dat.size5.metareg,
                      studlab=paste(auth_year),
                      method="GLMM",
                      sm="PLOGIT",
                      method.tau = "ML", 
                      method.ci = "WS",
                      pscale = 100
                      )

size5mm.metareg.result <- metareg(size5.metareg, ~prop_size5)
size5mm.metareg.result
## 
## Mixed-Effects Model (k = 23; tau^2 estimator: ML)
## 
## tau^2 (estimated amount of residual heterogeneity):     0.9946
## tau (square root of estimated tau^2 value):             0.9973
## I^2 (residual heterogeneity / unaccounted variability): 81.8729%
## H^2 (unaccounted variability / sampling variability):   5.5166
## 
## Tests for Residual Heterogeneity:
## Wld(df = 21) = 135.3845, p-val < .0001
## LRT(df = 21) = 141.3176, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 2.1171, p-val = 0.1457
## 
## Model Results:
## 
##             estimate      se     zval    pval    ci.lb    ci.ub 
## intrcpt      -6.1200  1.2571  -4.8685  <.0001  -8.5838  -3.6562  *** 
## prop_size5    2.2041  1.5149   1.4550  0.1457  -0.7649   5.1732      
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(size5mm.metareg.result, studlab=dat.size5.metareg$auth_year, xlim=c(0, 1), main="Meta-regression plot for 5mm Aneurysm size")

There is no evidence that the pooled rupture risk varied by the proportion of patients with aneursysms 5mm and less included in the studies (P=.66)

Metaregression to explore size categorised at 3mm

sizedata10 <- filter(maindata, size == 10)

dat10.metareg <- sizedata10 %>%
  mutate(total_size10 = coalesce(num_anr,num)) %>%
  drop_na(total_size10) %>% 
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  select(auth_year, rupt, total_size10) %>%
  rename(rupt10 = rupt)

dat3.metareg <- dat3 %>%
  rename(rupt3 = rupt) %>%
  rename(total_size3 = total_size) 

dat.size3.metareg <- left_join(dat3.metareg, dat10.metareg) %>%
  mutate(prop_size3 = total_size3 / total_size10)
## Joining, by = "auth_year"
size3.metareg = metaprop(rupt10, total_size10,
                      data=dat.size3.metareg,
                      studlab=paste(auth_year),
                      method="GLMM",
                      sm="PLOGIT",
                      method.tau = "ML", 
                      method.ci = "WS",
                      pscale = 100
                      )

size3mm.metareg.result <- metareg(size3.metareg, ~prop_size3)
size3mm.metareg.result
## 
## Mixed-Effects Model (k = 16; tau^2 estimator: ML)
## 
## tau^2 (estimated amount of residual heterogeneity):     1.2865
## tau (square root of estimated tau^2 value):             1.1343
## I^2 (residual heterogeneity / unaccounted variability): 77.8670%
## H^2 (unaccounted variability / sampling variability):   4.5181
## 
## Tests for Residual Heterogeneity:
## Wld(df = 14) = 101.5515, p-val < .0001
## LRT(df = 14) = 115.5199, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.0829, p-val = 0.7734
## 
## Model Results:
## 
##             estimate      se     zval    pval    ci.lb    ci.ub 
## intrcpt      -4.6398  0.7911  -5.8649  <.0001  -6.1903  -3.0892  *** 
## prop_size3    0.5023  1.7448   0.2879  0.7734  -2.9174   3.9221      
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(size3mm.metareg.result, studlab=dat.size3.metareg$auth_year, xlim=c(0, 1), main="Meta-regression plot for 3mm Aneurysm size")

There is no evidence that the pooled rupture risk varied by the proportion of patients with aneursysms 3mm and less included in the studies (P=.92)

Metaregression to explore size end of study enrollment

We can analyse whether there is a relationship between the year the last patient was included in the study (potential effect modifier), and the the outcome (rupture proportion).

The choice of this potential effect modifier is:

  • Exploratory
  • Biologically plausible - since comorbidity profiles, and medical management of comorbidities has changed
  • Relevant to physicians

Since we are analysing at a study level, this is an exploratory and hypothesis generating analysis.

dat.year.metareg <- sizedata %>%
  mutate(total_size = coalesce(num_anr,num)) %>%
  drop_na(total_size) %>% 
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  select(auth_year, end, rupt, total_size) %>%
  drop_na(end)
year.metareg = metaprop(rupt, total_size,
                      data=dat.year.metareg,
                      studlab=paste(auth_year),
                      method="GLMM",
                      sm="PLOGIT",
                      method.tau = "ML", 
                      method.ci = "WS",
                      pscale = 100
                      )

year.metareg.result <- metareg(year.metareg, ~end)
year.metareg.result
## 
## Mixed-Effects Model (k = 26; tau^2 estimator: ML)
## 
## tau^2 (estimated amount of residual heterogeneity):     0.2869
## tau (square root of estimated tau^2 value):             0.5356
## I^2 (residual heterogeneity / unaccounted variability): 62.4019%
## H^2 (unaccounted variability / sampling variability):   2.6597
## 
## Tests for Residual Heterogeneity:
## Wld(df = 24) = 67.2656, p-val < .0001
## LRT(df = 24) = 85.0110, p-val < .0001
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 26.6583, p-val < .0001
## 
## Model Results:
## 
##          estimate       se     zval    pval     ci.lb     ci.ub 
## intrcpt  166.5112  33.0397   5.0397  <.0001  101.7546  231.2678  *** 
## end       -0.0851   0.0165  -5.1632  <.0001   -0.1175   -0.0528  *** 
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(year.metareg.result, studlab=dat.year.metareg$auth_year, xlim=c(1960, 2020), main="Meta-regression plot for Study End Year")

This plot suggests that there is an association between end of study year and rupture risk of aneurysms.

We can repeat this excluding Juvela.

dat.year.metareg.juvela <- sizedata %>%
  slice(-12) %>%
  mutate(total_size = coalesce(num_anr,num)) %>%
  drop_na(total_size) %>% 
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  select(auth_year, end, rupt, total_size) %>%
  drop_na(end)
year.metareg.juvela = metaprop(rupt, total_size,
                      data=dat.year.metareg.juvela,
                      studlab=paste(auth_year),
                      method="GLMM",
                      sm="PLOGIT",
                      method.tau = "ML", 
                      method.ci = "WS",
                      pscale = 100
                      )

year.metareg.result.juvela <- metareg(year.metareg.juvela, ~end)
year.metareg.result.juvela
## 
## Mixed-Effects Model (k = 25; tau^2 estimator: ML)
## 
## tau^2 (estimated amount of residual heterogeneity):     0.1377
## tau (square root of estimated tau^2 value):             0.3711
## I^2 (residual heterogeneity / unaccounted variability): 41.0342%
## H^2 (unaccounted variability / sampling variability):   1.6959
## 
## Tests for Residual Heterogeneity:
## Wld(df = 23) = 24.4260, p-val = 0.3805
## LRT(df = 23) = 40.8728, p-val = 0.0122
## 
## Test of Moderators (coefficient 2):
## QM(df = 1) = 2.6952, p-val = 0.1007
## 
## Model Results:
## 
##          estimate       se     zval    pval     ci.lb     ci.ub 
## intrcpt   71.4488  46.1113   1.5495  0.1213  -18.9278  161.8253    
## end       -0.0378   0.0230  -1.6417  0.1007   -0.0828    0.0073    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(year.metareg.result.juvela, studlab=dat.year.metareg.juvela$auth_year, xlim=c(1985, 2015), main="Meta-regression plot for Study End Year excluding Juvela")

Once Juvela is excluded, then there is no evidence of an association between rupture risk and study end year.

Multivariable meta-regression

In the previous scenarios we have considered the impact of a single study-level effect modifier on the outcome of rupture risk.

Given that we have identified that when all studies are included, the proportion of patients with prior SAH exposure and year of study end are associated with rupture risk, we can examine this in a multivariable meta-regression model.

dat.psah.year.metareg <- sizedata %>%
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  mutate(total_anr = coalesce(num_anr,num)) %>%
  drop_na(total_anr) %>%
  rename(ai = rupt_psah) %>%
  rename(rupt.total = rupt) %>%
  mutate(ci = rupt.total - ai) %>%
  rename(n1i.temp = psah) %>%
  mutate(prop = psah_tot / num_tot) %>%
  mutate(num_anr_psah = prop * total_anr) %>%
  mutate(n1i = coalesce(n1i.temp,num_anr_psah)) %>%
  mutate(n2i = total_anr - n1i) %>%
  mutate(bi = n1i - ai) %>%
  mutate(di = n2i - ci) %>%
  select(auth_year, rupt.total, total_anr, prop, end)  
psah.year.metareg = metaprop(rupt.total, total_anr,
                      data=dat.psah.year.metareg,
                      studlab=paste(auth_year),
                      method="GLMM",
                      sm="PLOGIT",
                      method.tau = "ML", 
                      method.ci = "WS",
                      pscale = 100
                      )

psah.year.metareg.result <- metareg(psah.year.metareg, ~ prop + end)
## Warning in rma.glmm(xi = event[!exclude], ni = n[!exclude], data = dataset, :
## Studies with NAs omitted from model fitting.
## Warning in rma.glmm(xi = event[!exclude], ni = n[!exclude], data = dataset, :
## Some yi/vi values are NA.
psah.year.metareg.result
## 
## Mixed-Effects Model (k = 24; tau^2 estimator: ML)
## 
## tau^2 (estimated amount of residual heterogeneity):     0.3194
## tau (square root of estimated tau^2 value):             0.5651
## I^2 (residual heterogeneity / unaccounted variability): 58.7915%
## H^2 (unaccounted variability / sampling variability):   2.4267
## 
## Tests for Residual Heterogeneity:
## Wld(df = 21) = 58.5954, p-val < .0001
## LRT(df = 21) = 79.7854, p-val < .0001
## 
## Test of Moderators (coefficients 2:3):
## QM(df = 2) = 25.6939, p-val < .0001
## 
## Model Results:
## 
##          estimate       se     zval    pval     ci.lb     ci.ub 
## intrcpt  106.0048  70.7508   1.4983  0.1341  -32.6642  244.6739    
## prop       1.4246   1.3481   1.0567  0.2906   -1.2176    4.0668    
## end       -0.0551   0.0352  -1.5654  0.1175   -0.1241    0.0139    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(psah.year.metareg.result, studlab=dat.psah.year.metareg$auth_year, xlim=c(0, 1), main="Multivariable Meta-regression plot for prior SAH and Study End")
## Warning in bubble.metareg(psah.year.metareg.result, studlab =
## dat.psah.year.metareg$auth_year, : Only first covariate in meta-regression
## ('prop') considered in bubble plot. No regression line plotted.

Proportion of prior SAH patients in each study and year of study end are not associated with rupture risk when considered in a multivariable meta-regression analysis.

consider additional multivariable meta-regression with proportion of prior SAH and study follow up

Sensitivity analysis

Sensitivity analysis is used to assess the robustness of the result, and helps strengthed or weaken the conclusions that can be drawn from the meta-analysis.

If sensitivity analyses show that the overall result and conclusions are not affected by the different decisions that could be made during the review process, the results of the review can be regarded with a higher degree of certainty.

Similarly, if sensitivity analyses show that the overall result and conclusions are affected, the results should be interpreted with caution, and can be used to generate hypothesis for additional research.

Sensitivity analysis differs from subgroup analysis in that there is no assessment of the treatment effect in the removed studies, nor is there formal statistical assessment across the included and excluded studies. Instead, there is an informal comparison by recalculating the pooled effect size.

Sensitivity analysis - consider fixed vs random effects meta-analysis decision

If there is heterogeniety, the random effect meta-analysis weights studies more equally. However, if there are marked small study effects, and only 1 high quality study, then this may not be reasonable. To synthesise the data, the author must make a decision whether this is appropriate. This can be done by comparing the results of the random and fixed effects meta-analysis.

pes.summary.glmm
##                   events             95%-CI
## Bor 2015          0.7444 [ 0.2535;  2.1655]
## Broderick 2009    1.8519 [ 0.5093;  6.5019]
## Burns 2009        0.5780 [ 0.1021;  3.2011]
## Byoun 2016        1.7628 [ 0.9871;  3.1288]
## Choi 2018         0.5780 [ 0.1021;  3.2011]
## Gibbs 2004        0.0000 [ 0.0000; 14.8655]
## Gondar 2016       0.8152 [ 0.2776;  2.3691]
## Guresir 2013      0.7812 [ 0.2660;  2.2715]
## Irazabal 2011     0.0000 [ 0.0000;  7.8652]
## Jeon 2014         0.3521 [ 0.0966;  1.2746]
## Jiang 2013        0.0000 [ 0.0000;  7.1348]
## Juvela 2013      18.6747 [13.4796; 25.2868]
## Loumiotis 2011    0.0000 [ 0.0000;  2.3446]
## Matsubara 2004    0.0000 [ 0.0000;  2.3736]
## Matsumoto 2013    2.6549 [ 0.9069;  7.5160]
## Mizoi 1995        0.0000 [ 0.0000; 15.4639]
## Morita 2012       1.8658 [ 1.4582;  2.3845]
## Murayama 2016     2.2384 [ 1.6660;  3.0014]
## Oh 2013           0.0000 [ 0.0000; 16.8179]
## Serrone 2016      0.5155 [ 0.0911;  2.8615]
## So 2010           1.1450 [ 0.3902;  3.3118]
## Sonobe 2010       1.5625 [ 0.7589;  3.1897]
## Teo 2016          2.3810 [ 0.8130;  6.7666]
## Thien 2017        0.6173 [ 0.1090;  3.4133]
## Tsukahara 2005    3.4722 [ 1.4921;  7.8703]
## Tsutsumi 2000     4.3478 [ 1.4896; 12.0212]
## Villablanca 2013  1.5544 [ 0.5300;  4.4697]
## Wiebers-R 1998    1.3503 [ 0.8558;  2.1244]
## Wilkinson 2018    0.0000 [ 0.0000; 14.8655]
## Zylkowski 2015    2.7273 [ 0.9318;  7.7131]
## 
## Number of studies combined: k = 30
## 
##                      events           95%-CI
## Fixed effect model   1.7872 [1.5638; 2.0419]
## Random effects model 1.2112 [0.7844; 1.8659]
## 
## Quantifying heterogeneity:
##  tau^2 = 0.7974; tau = 0.8930; I^2 = 82.7%; H = 2.41
## 
## Test of heterogeneity:
##       Q d.f.  p-value             Test
##  170.38   29 < 0.0001        Wald-type
##  148.41   29 < 0.0001 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

Here the results are not clinically significant with the overall same rupture proportion of 1-2% with either method. Moreover, in our case, a random effects meta-analysis is more appropriate due to existence of clinical and methodological heterogeneity. Regardless, other sources of heterogeneity still need to be explored.

Sensitivity analysis - exclude based on study quality

Quality assessment was performed using the Newastle Ottowa Scale as recommended by Cochrane; this is also the most commonly utilised for observational studies.

This can be converted to the The Agency for Healthcare Research and Quality within the United States Department of Health and Human Services (AHRQ) standards using the following thresholds.

Good quality: 3 or 4 stars in selection domain AND 1 or 2 stars in comparability domain AND 2 or 3 stars in outcome/exposure domain

Fair quality: 2 stars in selection domain AND 1 or 2 stars in comparability domain AND 2 or 3 stars in outcome/exposure domain

Poor quality: 0 or 1 star in selection domain OR 0 stars in comparability domain OR 0 or 1 stars in outcome/exposure domain

dat.sens.nos <- sizedata %>%
  filter(nos_select == 3 | nos_select == 4 ) %>%
  filter(nos_compare == 1 | nos_compare == 2) %>%
  filter(nos_outcome == 2 | nos_outcome == 3) %>%
  mutate(ahrq = "Good")

dat.sens.nos <- dat.sens.nos %>%
  mutate(total_size = coalesce(num_anr,num)) %>%
  drop_na(total_size) %>% 
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  select(auth_year, rupt, total_size)
pes.sens.nos = metaprop(rupt, total_size,
                        data=dat.sens.nos,
                        studlab=paste(auth_year),
                        method="GLMM",
                        sm="PLOGIT",
                        method.tau = "ML", 
                        method.ci = "WS",
                        pscale = 100
                        ) 
pes.sens.nos
##                 events             95%-CI
## Irazabal 2011   0.0000 [ 0.0000;  7.8652]
## Juvela 2013    22.9630 [16.6751; 30.7469]
## Matsumoto 2013  2.6549 [ 0.9069;  7.5160]
## Mizoi 1995      0.0000 [ 0.0000; 15.4639]
## Morita 2012     1.8658 [ 1.4582;  2.3845]
## Murayama 2016   2.2384 [ 1.6660;  3.0014]
## Serrone 2016    0.5155 [ 0.0911;  2.8615]
## So 2010         1.1450 [ 0.3902;  3.3118]
## Sonobe 2010     1.5625 [ 0.7589;  3.1897]
## Wiebers-R 1998  1.6901 [ 1.0717;  2.6558]
## 
## Number of studies combined: k = 10
## 
##                      events           95%-CI
## Fixed effect model   2.2320 [1.9215; 2.5912]
## Random effects model 1.9027 [0.8747; 4.0888]
## 
## Quantifying heterogeneity:
##  tau^2 = 1.1526; tau = 1.0736; I^2 = 93.8%; H = 4.03
## 
## Test of heterogeneity:
##       Q d.f.  p-value             Test
##  155.62    9 < 0.0001        Wald-type
##  108.28    9 < 0.0001 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

Here we can see the point estimate and the confidence intervals varies from

All studies 1.2198 [0.7739; 1.9177] Good Quality studies 1.9027 [0.8747; 4.0888]

There is even higher heterogeniety, and thus results of the original pooled analysis need to be interpreted with caution.

Sensitivity analysis - exclude based on small study samples

dat.sens.samplesize <- sizedata %>%
  mutate(total_size = coalesce(num_anr,num)) %>%
  drop_na(total_size) %>% 
  unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
  filter(total_size > 500) %>%
  select(auth_year, rupt, total_size)
pes.sens.samplesize = metaprop(rupt, total_size,
                        data=dat.sens.samplesize,
                        studlab=paste(auth_year),
                        method="GLMM",
                        sm="PLOGIT",
                        method.tau = "ML", 
                        method.ci = "WS",
                        pscale = 100
                        ) 
pes.sens.samplesize
##                events           95%-CI
## Byoun 2016     1.7628 [0.9871; 3.1288]
## Jeon 2014      0.3521 [0.0966; 1.2746]
## Morita 2012    1.8658 [1.4582; 2.3845]
## Murayama 2016  2.2384 [1.6660; 3.0014]
## Wiebers-R 1998 1.6901 [1.0717; 2.6558]
## 
## Number of studies combined: k = 5
## 
##                      events           95%-CI
## Fixed effect model   1.8131 [1.5346; 2.1411]
## Random effects model 1.7312 [1.2165; 2.4584]
## 
## Quantifying heterogeneity:
##  tau^2 = 0.0250; tau = 0.1582; I^2 = 35.8%; H = 1.25
## 
## Test of heterogeneity:
##      Q d.f. p-value             Test
##   7.28    4  0.1218        Wald-type
##  12.13    4  0.0164 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Events per 100 observations

Here we can see the point estimate and the confidence intervals varies from

All studies 1.2198 [0.7739; 1.9177] Studies with sample size > 500 aneurysms 1.7312 [1.2165; 2.4584]

Notably, the confidence intervals overlap, and I2 has reduced. Overall, suggests that the original pooled result needs to be interpreted with caution.

Sensitivity analysis - using Baujat plots to identify which studies contribute most to heterogeniety

These plots shows the contribution of each study to the overall Q-test statistic for heterogeneity on the horizontal axis versus the influence of each study (defined as the standardized squared difference between the overall estimate based on a fixed-effects model with and without the study included in the model) on the vertical axis. Baujat 2002

baujat(pes.summary.glmm)

This shows that Juvela et al is the major source of between study heterogeneity.

We can use these sources of heterogeniety to assess for moderating variables that may contribute to the heterogeneity.

Re-run analysis excluding Juvela - post hoc sensitivity analysis

dat.juvela <- slice(dat, -12)
pes.summary.glmm.juvela = metaprop(rupt, total_size,
                            data=dat.juvela,
                            studlab=paste(auth_year),
                            sm="PLOGIT",
                            method.tau = "ML", 
                            method.ci = "WS",
                            pscale = 100
                            ) 
pes.summary.glmm.juvela
##                  events            95%-CI
## Bor 2015         0.7444 [0.2535;  2.1655]
## Broderick 2009   1.8519 [0.5093;  6.5019]
## Burns 2009       0.5780 [0.1021;  3.2011]
## Byoun 2016       1.7628 [0.9871;  3.1288]
## Choi 2018        0.5780 [0.1021;  3.2011]
## Gibbs 2004       0.0000 [0.0000; 14.8655]
## Gondar 2016      0.8152 [0.2776;  2.3691]
## Guresir 2013     0.7812 [0.2660;  2.2715]
## Irazabal 2011    0.0000 [0.0000;  7.8652]
## Jeon 2014        0.3521 [0.0966;  1.2746]
## Jiang 2013       0.0000 [0.0000;  7.1348]
## Loumiotis 2011   0.0000 [0.0000;  2.3446]
## Matsubara 2004   0.0000 [0.0000;  2.3736]
## Matsumoto 2013   2.6549 [0.9069;  7.5160]
## Mizoi 1995       0.0000 [0.0000; 15.4639]
## Morita 2012      1.8658 [1.4582;  2.3845]
## Murayama 2016    2.2384 [1.6660;  3.0014]
## Oh 2013          0.0000 [0.0000; 16.8179]
## Serrone 2016     0.5155 [0.0911;  2.8615]
## So 2010          1.1450 [0.3902;  3.3118]
## Sonobe 2010      1.5625 [0.7589;  3.1897]
## Teo 2016         2.3810 [0.8130;  6.7666]
## Thien 2017       0.6173 [0.1090;  3.4133]
## Tsukahara 2005   3.4722 [1.4921;  7.8703]
## Tsutsumi 2000    4.3478 [1.4896; 12.0212]
## Villablanca 2013 1.5544 [0.5300;  4.4697]
## Wiebers-R 1998   1.3503 [0.8558;  2.1244]
## Wilkinson 2018   0.0000 [0.0000; 14.8655]
## Zylkowski 2015   2.7273 [0.9318;  7.7131]
## 
## Number of studies combined: k = 29
## 
##                      events           95%-CI
## Fixed effect model   1.5475 [1.3390; 1.7879]
## Random effects model 1.2625 [0.9445; 1.6858]
## 
## Quantifying heterogeneity:
##  tau^2 = 0.1359; tau = 0.3687; I^2 = 41.8%; H = 1.31
## 
## Test of heterogeneity:
##      Q d.f. p-value             Test
##  27.45   28  0.4940        Wald-type
##  49.86   28  0.0067 Likelihood-Ratio
## 
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
##   (only used to calculate individual study results)
## - Events per 100 observations

This exploratory analaysis demonstrates greater homogeniety, with reduced and now moderate I2 and higher Q-statistic.

The point estimate and confidence intervals have changed slightly, which confirms the influence of the Juvela study.

Including Juvela - 1.2198 (0.7739; 1.9177) Excluding Juvela - 1.2849 (0.9547; 1.7274)

Nonetheless, the change is not significant from a clinical application point of view, with overall rupture risk still 1-2% overall.

Rerun Baujat plots excluing Juvela - exploratory

baujat(pes.summary.glmm.juvela, 
       xlim=c(0,40), 
       ylim=c(0,40)
       )

Keeping the influence axis the same, the significant improvement in heterogeniety is noted. This can be re-processed with smaller scales to more closely explore the result.

baujat(pes.summary.glmm.juvela, 
       xlim=c(0,6), 
       ylim=c(0,6)
       )

Overall, there seems to be an acceptable level of heterogeniety given the samples that are available, and there are no studies that contribute both to heterogeniety and influence on the overall result apart from Juvela.

Funnel plots - exploratory for small study publication bias

Studies with higher effect sizes are more likely to be published than those with lower effects. These missing studies which are not published are not identified and not integrated into the meta-analysis. This leads to publication bias meaning that the calculated effect size might be higher, and the true effect size lower since studies with lower effects were not published.

In addition, large studies are more likely to get published regardless of the effect size. Small studies are at the greatest risk, since they are only generally published if there is a large effect size.

Thus when assessing for publication bias, conventional assessment is focused on identifying whether small studies with small effect sizes are missing or not.

This can be performed using a funnel plot, however, we will later discuss why a funnel plot analysis may not be required.

funnel(pes.summary.glmm)

Here we can see that the funnel plot is assymetrical with visual assessment. The assymetry is primarily driven by 1 study in the top right corner with a large effect. We can identify the study by labelling the funnel plot.

funnel(pes.summary.glmm,
       studlab = TRUE
       )

There are many possible sources of funnel plot assymetry - selection bias from publication and selective outcome reporting bias, poor methodological quality leading to spuriously elevated effecs in small studies, true heterogeniety, statistical modeling artefacts and chance.

In our case, the most likely explanation for this appearance of the funnel plot is due to the outlier rupture risk in the Juvela study that contributes to true heterogeniety from true differences in rupture proportion.

In general, testing for funnel plot assymetry should always be performed in the context of visual assessment, and while there are many potential statistical tests for funnel plots including Egger 1997, Harbord 2006, Peters 2006 or Rücker 2008, even Cochrane suggests that tests for funnel plot asymmetry should be used in only a minority of meta-analyses (Ioannidis 2007b).

Exploratory analysis

How do we assess the effect of exposure to prior SAH for participants that arise from the same population ?

Consider the data in the form of a 2 x 2 table, prior SAH as the exposure and rupture as the outcome.

  • ai = prior SAH and rupture +ve

  • bi = prior SAH and rupture -ve

  • ci = no prior SAH and rupture +ve

  • di = no prior SAH, and rupture -ve

  • n1i = ai + bi = total aneurysms with prior SAH

  • n2i = ci + di = total aneurysms without prior SAH

Rupture of the aneurysm is considered a rare event ie <1%, and the data are sparse with single 0s or double 0s in the 2 x 2 table.

This is methodologically challenging, and the choice of meta-analyis method is important. As we discussed The most common methods of MA is the inverse variance method, using the DerSimonian and Laird random effects model.

The DL method calculates an effect size separately for each study, with the standard error. The effect sizes are then synthesised across studies. However, when one of the cells has a 0 which is common with rare events, the inverse variance cannot be used because the variances become undefined.

There are 2 options for correction: use of a continuity correction ie adding a fixed value usually 0.5 or using calculating the risk difference. However using a continuity correction leads to excess bias in the effect, and can influence the result and conclusions (Stinjen 2010). Risk differences have poor statistical properties with too wide intervals when events are rare, and are also not recommended (Bradburn 2007)

There are also issues on how to handle double 0 studies, since these may also carry some meaningful data due to their sample size (Keus 2009).

In summary, there is debate on what is the best model to meta-analyse rare events. Use of Peto’s method to estimate the OR is often suggested for rare events, since this includes single zero studies without a continuity correction. Double zero studies are excluded.

However, to use Peto’s method, the following three conditions need to hold true ie a rare event <1%, the exposure / treatment groups are balanced, and the effects are not very large (Cochrane handbook). Unless all three are true, then Peto’s method also may give biased results. In our dataset, the groups with and without prior SAH are unbalanced ie >1:3, so Peto’s method is not appropriate.

Alternatively,the Mantel-haenszel without zero cell continuity correction can be used for unbalanced exposure / treatment groups.(Efthimiou 2018) This method provides a fixed effects meta-anlysis so is best used in the absence of heterogeniety and does exclude double zero studies. In our dataset, there is heterogeniety, and thus a random effects meta-analysis is preferred.

A generalised linear mixed method (GLMM) model can be used for odds-ratio meta-analysis for rare outcomes, specifically by utilising a hypergeometric-normal (HN) model for the meta-analysis of odds ratios (Stinjen 2010). This is appropriate since the event aneurysm rupture is not a true binomial distribution, but in fact a hypergeometric distribution.

The hypergeometric distribution is best explained by sampling coloured balls in an urn. Hypergeometric distribution is sampling without replacement compared to a binomial distribution where there is sampling with replacement, and the probability of success is required.

If the balls are of different weight or size, ie one has a greater chance of being chosen, this is a noncentral hypergeometric distribution. The non central hypergeometric distribution can be of the Wallenius type or Fisher type.

Wallenius type is the biased urn mode, where balls are taken out 1 by 1. Fisher type occurs when the outcome is known, and the number of balls in the urn and their colour need to be calculated. For large samples with a common outcome, the binomial distribution is a reasonable estimate. However in populations that are small, or outcomes that are rare, such as in our dataset where certain aneurysms have features that make them more prone to rupure ie heavier weighted ball, thus each outcome influences the probability of the next event. Thus the non central hyperegeometric distribution is required.

Recent developments in statistical packages, including in R, make these computationaly intensive methods practical and feasible. The HN model performs well, with minimal bias, and satsifactory coverage of the 95% CIs with rare events.

Mete-regression can also be included easily by extending the model to include a study level covariate.

Using metafor to asess the potential effect modification of prior SAH using a GLMM

Structure the data in this format

Author This signifies the column for the study label (i.e., the first author)

  • ai = prior SAH and rupture +ve

  • bi = prior SAH and rupture -ve

  • ci = no prior SAH and rupture +ve

  • di = no prior SAH, and rupture -ve

  • n1i = ai + bi = total aneurysms with prior SAH

  • n2i = ci + di = total aneurysms without prior SAH

Assumptions

For num_anr is not known, then num (of patients) is brought forward assuming 1 patient has 1 aneurysm.

For aneurysms in size cohort with prior SAH, this is estimated by using same proportion of patients with prior SAH in the total observed cohort, and applying this to the number of aneurysms in that specific size cohort.

Use the rma function from metafor to meta-analyse log odds ratio using conditional logistic regression model with random effects meta-analysis. The conditional generalized linear mixed-effects model with exact likelihood (model=“CM.EL”) avoids having to model study level variability by conditioning on the total numbers of cases/events in each study. For the odds ratio, this leads to a non-central hypergeometric distribution for the data within each study and the corresponding model is then a mixed-effects conditional logistic model.

Only studies that included patients both with and without history of prior SAH are included.

res <- rma.glmm(measure = "OR", 
                ai = ai, 
                bi = bi, 
                ci = ci, 
                di = di, 
                data = dat.psahpos,
                slab = auth_year,
                model = "CM.EL",
                method = "ML"
                )
## Warning in rma.glmm(measure = "OR", ai = ai, bi = bi, ci = ci, di = di, :
## Studies with NAs omitted from model fitting.
## Warning in rma.glmm(measure = "OR", ai = ai, bi = bi, ci = ci, di = di, : Some
## yi/vi values are NA.
res
## 
## Random-Effects Model (k = 8; tau^2 estimator: ML)
## Model Type: Conditional Model with Exact Likelihood
## 
## tau^2 (estimated amount of total heterogeneity): 1.3341 (SE = 1.6759)
## tau (square root of estimated tau^2 value):      1.1550
## I^2 (total heterogeneity / total variability):   45.4492%
## H^2 (total variability / sampling variability):  1.8332
## 
## Tests for Heterogeneity:
## Wld(df = 7) =  2.8946, p-val = 0.8946
## LRT(df = 7) = 14.4598, p-val = 0.0436
## 
## Model Results:
## 
## estimate      se    zval    pval    ci.lb   ci.ub 
##   0.4589  0.6674  0.6876  0.4917  -0.8492  1.7671    
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

View the results as a forest

forest(res)

Overall, taking into account the limitations of the data, prior SAH may not increase rupture risk in small unruptured aneurysms measuring 10 mm or less. In addition, the overall rupture risk for conservatively managed aneurysms is more uncertain than previously considered with up to 2% risk of rupture.

These synthesised data analyses are considered exploratory and hypothesis generating, and additional data are required.

Exploratory - try and put the size subgroups all on one plot

additional code suggested by Thanh,

however, unlike retrospective / prospective subgroup analyisis, the subgroups are not mutually exclusive when conidering poportion of patients included with various size categories, ie numbers of 3 mm and less are included in 5 mm and less and so on. Thus I think that individual plots for size subgroup analysis submitted as supplementary files are more appropriate.

we can do additional subgroup analysis and combined plots for study quality etc.